#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

#include <QDebug>
#include <QTimer>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QString>
#include <QStringList>

#include "qcustomplot.h"

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    bool            isOpenPort     = false;     /* 串口打开状态 */
    bool            isEnRecvData   = true;      /* 是否接收数据 */
    bool            isShowRecvData = false;     /* 是否显示接收到的数据 */
    bool            isHexRecvData  = true;      /* 接收数据 HEX 形式 */
    bool            isEnWaveShow   = true;      /* 波形显示使能状态 */
    unsigned int    wavePointIdx   = 0;         /* 波形点序号 */
    QTimer *        scanTimer      = nullptr;   /* 扫描串口定时器 */
    QSerialPort *   serialPort     = nullptr;   /* 串口对象 */
    QCPItemTracer * tracer         = nullptr;   /* 波形显示游标 */
    QCPItemText *   tracerLabel    = nullptr;   /* 波形游标说明 */

    void init_SerialPort(QSerialPort * serialPort, QString name, QString baud);
    void serial_ReceiveData(void);

private slots:
    /* 无归类槽函数 */
    void on_timerTimeout();                           /* 周期扫描可用串口 */

    /* 串口操作部分槽函数 */
    void on_portOCPushButton_clicked();               /* 打开/关闭串口按键按下 */

    /* 接收数据部分槽函数 */
    void on_pauseRecvPushButton_clicked();            /* 开始 / 暂停接收数据 */
    void on_clearRecvPushButton_clicked();            /* 清除接收数据按键按下 */
    void on_recvShowCheckBox_stateChanged(int arg1);  /* 是否显示数据 */
    void on_recvHexCheckBox_stateChanged(int arg1);   /* 是否显示16进制形式 */

    /* 波形显示部分槽函数 */
    void on_waveEnPushButton_clicked();               /* 暂停波形显示 */
    void on_waveClearPushButton_clicked();            /* 清除波形显示 */
    void on_MouseMoveShowTracer(QMouseEvent * event); /* 当鼠标在波形内移动时显示坐标 */

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H
